<?php


/**
 * Obtenir la liste des horaires par catégorie et par gymnase
 * @return array 2D, tel que :
 * - 1ère dimension : liste des catégorie
 * - 2ème dimension :
 *   - 0 => id catégorie
 *   - 1 => nom de catégorie
 *   - 2 => tranche d'age de la catégorie
 *   - 3 => description
 *   - 4 => places max
 *   - de $i = 5 à $i = (N - 1) => horaires des gymnases, tel que :
 * 	    $i = gym_id
 *      $i + 1 = données du créneau (soit un horaire de gymnase tous les 2 postes)
 *
 * 	1ère dimension triée par age des catégories
 *  2ème dimension à partir du poste 5 triée par ordre alphabétique des noms de gymnases
 */
function hours_get_list()
{
	$sql = 'SELECT c.id AS cat_id, c.name AS cat_name, c.age_min, c.age_max,
	               c.description, c.max_places,
	               g.id AS gym_id, g.name AS gym_name,
	               h.day, h.open_hour, h.open_min, h.close_hour, h.close_min, h.instructor_name, h.enabled
	        FROM GymHours h
	        LEFT JOIN Gymnasium g on h.idGymnasium =  g.id
	        LEFT JOIN Category c on h.idCategory = c.id
	        ORDER BY c.age_max, c.name, g.name';
	$data = sql_query($sql);
	$days = hours_list_days();
	$hours = array();

	$last_cat_id = 0; // le premier sera toujours != 0

	while ($row = mysql_fetch_assoc($data)) {
		// données du créneau
		$current_gym_hours_data = false;
		if ($row['enabled']) {
			$current_gym_hours_data = sprintf(
				'%s, de %02dh%02d à %02dh%02d',
				$days[$row['day']],
				$row['open_hour'], $row['open_min'],
				$row['close_hour'], $row['close_min']
			);
			if ($row['instructor_name']) {
				$current_gym_hours_data .= '<br /><em>Moniteur :</em> ';
				$current_gym_hours_data .= $row['instructor_name'];
			}
		}

		// si nouvelle catégorie, nouveau poste dans la 1ère dimension
		if ($row['cat_id'] != $last_cat_id) {
			$last_cat_id = $row['cat_id'];

			$hours[] = array(
				$last_cat_id,
				$row['cat_name'],
				sprintf('de %d à %d ans', $row['age_min'], $row['age_max']),
				$row['description'],
				$row['max_places'],
				$row['gym_id'], // <- créneau n° 1 pour la catégorie $last_cat_id
				$current_gym_hours_data
			);
		}
		// sinon, nouveau gymnase dans le dernier poste de la 1ère dimension
		else {
			$hours[count($hours) - 1][] = $row['gym_id']; // <- créneau n° 2 à n pour $last_cat_id
			$hours[count($hours) - 1][] = $current_gym_hours_data;
		}
	}
	return $hours;
}

function hours_count_members($gym_id, $cat_id)
{
	$gym_id = intval($gym_id);
	$cat_id = intval($cat_id);
	$sql = "SELECT COUNT(m.id)
	        FROM Member m
	        WHERE (m.status_id in (select s.id from MemberStatus s where s.code = 'MEMBER' or s.code = 'WAITING_MEMBER'))
	          AND m.idGymnasium = $gym_id
	          AND m.idCategory = $cat_id;";
	$data = sql_query($sql);
	$row = mysql_fetch_row($data);
	return $row[0];
}

/**
 * Obtenir un horaire
 * @param gym_id: id du gymnase
 * @param cat_id: id de la catégorie
 * @return array
 */
function hours_get_by_id($gym_id, $cat_id)
{
	$gym_id = intval($gym_id);
	$cat_id = intval($cat_id);
	$sql = 'SELECT c.id AS cat_id, c.name AS cat_name, c.age_min, c.age_max,
	               g.id AS gym_id, g.name AS gym_name,
	               h.day, h.open_hour, h.open_min, h.close_hour, h.close_min, h.instructor_name, h.enabled
	        FROM GymHours h
	        LEFT JOIN Gymnasium g on h.idGymnasium =  g.id
	        LEFT JOIN Category c on h.idCategory = c.id
	        WHERE h.idGymnasium = '.$gym_id.'
	              AND h.idCategory = '.$cat_id.'
	        ORDER BY c.age_max, c.name, g.name';
	$data = sql_query($sql);
	return mysql_fetch_assoc($data);
}


/**
 * Mettre à jour un horaire
 * @param gym_id: id du gymnase
 * @param cat_id: id de la catégorie
 */
function hours_update($gym_id, $cat_id, $start_hour, $start_min, $end_hour, $end_min, $day, $instructor_name)
{
	$gym_id = intval($gym_id);
	$cat_id = intval($cat_id);
	$start_hour = intval($start_hour);
	$start_min = intval($start_min);
	$end_hour = intval($end_hour);
	$end_min = intval($end_min);
	$day = intval($day);
	$instructor_name = mysql_real_escape_string($instructor_name);

	$sql = 'UPDATE GymHours
	        SET open_hour = '.$start_hour.',
	            open_min = '.$start_min.',
	            close_hour = '.$end_hour.',
	            close_min = '.$end_min.',
	            day = '.$day.',
	            instructor_name = "'.$instructor_name.'",
				enabled = 1
	        WHERE idGymnasium = '.$gym_id.' AND idCategory = '.$cat_id.';';
	return sql_query($sql);
}

/**
 * Désactiver un créneau horaire
 */
function hours_disable($gym_id, $cat_id)
{
	$gym_id = intval($gym_id);
	$cat_id = intval($cat_id);
	$sql = 'update GymHours 
	        set enabled = 0
			where idGymnasium = '.$gym_id.' AND idCategory = '.$cat_id.';';
	return sql_query($sql);
}

/**
 * @return array jours de la semaine (de 0 à 6)
 */
function hours_list_days()
{
	$days = array(
		'Lundi',
		'Mardi',
		'Mercredi',
		'Jeudi',
		'Vendredi',
		'Samedi',
		'Dimanche'
	);
	return $days;
}
